from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QMessageBox, QPushButton, QVBoxLayout, QHBoxLayout, QWidget, QLabel, QTextEdit
import sys


class CustomWidget(QWidget):
    def __init__(self) -> None:
        super().__init__()
        self.setWindowTitle('QLabel and QTextEdit')

        # 1. 设置 QLabel & QLineEdit
        label_01 = QLabel('文本框：')
        self.text_edit = QTextEdit()

        # 1.1 Button 和 事件绑定： 添加一些测试按键以测试功能
        current_text_button = QPushButton("Current Text")
        current_text_button.clicked.connect(self.current_text_button_clicked)    # 把按键的clicked信号处理函数(slot)指定到 QTextEdit 的 copy 函数

        copy_button = QPushButton("Copy Selected")
        copy_button.clicked.connect(self.text_edit.copy)    # 把按键的clicked信号处理函数(slot)指定到 QTextEdit 的 copy 函数

        cut_button = QPushButton("Cut Selected")
        cut_button.clicked.connect(self.text_edit.cut)

        paste_button = QPushButton("Paste")
        paste_button.clicked.connect(self.text_edit.paste)    
        # paste_button.clicked.connect(self.paste)    # 自定义黏贴的实现

        undo_button = QPushButton("Undo")
        undo_button.clicked.connect(self.text_edit.undo)

        redo_button = QPushButton("Redo")
        redo_button.clicked.connect(self.text_edit.redo)

        set_plain_text_button = QPushButton("Set Plain Text")
        set_plain_text_button.clicked.connect(self.setPlainText)    # 设置文件内容

        set_html_button = QPushButton("Set Html")
        set_html_button.clicked.connect(self.setHtml)   # 设置html文本

        set_markdown_button = QPushButton("Set MarkDown")
        set_markdown_button.clicked.connect(self.setMarkdown)   # 设置html文本

        clear_button = QPushButton("Clear")
        clear_button.clicked.connect(self.text_edit.clear)

        # 2. 界面布局

        # 2.1 将所有按键水平布局
        btn_box = QHBoxLayout()
        btn_box.addWidget(current_text_button)
        btn_box.addWidget(copy_button)
        btn_box.addWidget(cut_button)
        btn_box.addWidget(paste_button)
        btn_box.addWidget(undo_button)
        btn_box.addWidget(redo_button)
        btn_box.addWidget(set_plain_text_button)
        btn_box.addWidget(set_html_button)
        btn_box.addWidget(set_markdown_button)
        btn_box.addWidget(clear_button)
  

        # 2.2 使用水平盒子（QHBoxLayout），将 QLabel & QTextEdit 组合到一起
        label_box_01 = QHBoxLayout()
        label_box_01.addWidget(label_01)
        label_box_01.addWidget(self.text_edit)
        

        # 设置整体布局为水平布局
        layout = QVBoxLayout()
        layout.addLayout(btn_box)
        layout.addLayout(label_box_01)    # 添加box的时候，需要使用 addLayout() , addItem() 好像也可以

        # layout.addWidget(btn)           # 添加组件的时候，需要使用 addWidget()
   
        self.setLayout(layout)

    def current_text_button_clicked(self):
        print(self.text_edit.toPlainText())     # 获取文本框内容

    def paste(self):
        self.text_edit.paste()
        
    def setPlainText(self):
        self.text_edit.setPlainText('Hello! this is mine world!')

    def setHtml(self):
        self.text_edit.setHtml('<h1>标题1</h1><div>的地方地方</div>')

    def setMarkdown(self):
        self.text_edit.setMarkdown('''
# Python 使用pyside6 创建GUI应用

# 一、环境搭建
## 1.1 安装 `Anaconda3` 管理python虚拟环境
> Anaconda3下载在官网下载比较慢，而且容易断，推荐用下面清华镜像方式：  
> 下载地址：https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/

添加以下路径到环境变量，否则无法执行conda命令：
D:\WorkProgram\Anaconda3\
D:\WorkProgram\Anaconda3\Scripts

## 1.2 使用 `VS Code` 配置并使用虚拟环境
1. 安装 `python` 插件
    - 需要修改插件配置中`Conda Path`(第二步安装的)的路径为：        
         `D:\WorkProgram\Anaconda3\Scripts\conda.exe`
    - 然后一定要使用 `Command Prompt` 创建的窗口才能正常的切换虚拟环境

    > 据说要安装了这个全局依赖，才能切换虚拟环境  
    `pip install -i https://pypi.tuna.tsinghua.edu.cn/simple ipykernel`

2. 创建 `conda` 虚拟环境  
'''
        )
    


app = QApplication(sys.argv)


window = CustomWidget()
window.show()

app.exec()
